www.gusucode.com > VC++ 信息加密聊天源代码-源码程序 > VC++ 信息加密聊天源代码-源码程序\code\SecChat\ServiceSocket.cpp

    //Download by http://www.NewXing.com
// ServiceSocket.cpp : implementation file
//

#include "stdafx.h"
#include "SecretChat.h"		//应用程序类头文件
#include "ServiceSocket.h"
#include "SecretChatDlg.h"	//主窗口类头文件

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE	
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CServiceSocket

CServiceSocket::CServiceSocket()
{
}

CServiceSocket::~CServiceSocket()
{
}


// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CServiceSocket, CSocket)
	//{{AFX_MSG_MAP(CServiceSocket)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif	// 0

/////////////////////////////////////////////////////////////////////////////
// CServiceSocket member functions

void CServiceSocket::OnReceive(int nErrorCode)	//接收客户机数据事件
{	
	if(0 != nErrorCode)
	{	//发送错误
		AfxMessageBox("接收数据出错-1");
		return;
	}

	CSecretChatDlg * pMain = (CSecretChatDlg *)AfxGetMainWnd();
	MessagePackage msg;
	int n;					//实际接收到数据的字节数
	n = Receive(&msg, sizeof(MessagePackage));	//接收客户机数据

	if(0 > n)
	{	//发送错误
		AfxMessageBox("接收数据出错-2");
		return;
	}

	//错误提示
	pMain->CuoWuTiShi();

	/**********当收到的是对方发过来的消息************/
	if(msg.head == HEAD_TEXT) //收到的是正文
	{
		pMain->Receive(msg);	//在这里会调用接收消息的线程
	}

	else if(msg.head == HEAD_REVERT_TEXT) //发出的正文就收到的是回复
	{
		pMain->ReceiveRevert(msg);
	}

	else if(msg.head == HEAD_DISCONNECTION) //收到的是断开提示
	{
		pMain->disconnection_message(msg);
	}

	else if(msg.head == HEAD_ZAIXIANBIAOJI)		//在线通知
	{
		pMain->m_zai_xian_biao_ji = 0;	//取消等待时间记录
	}

	else if(msg.head == HEAD_VERSION)		//对方版本号和一些其他信息
	{	
		pMain->message_version(msg);
	}

	else if(msg.head == HEAD_CLAIM_PUBLIC_KEY) //对方的请求获得公钥
	{
		pMain->ClaimPublicKey(msg);
	}

	else if(msg.head == HEAD_REVERT_PUBLIC_KEY) //收到对方发过来的公钥
	{
		pMain->RevertPublicKey(msg);
	}

	else if(msg.head == HEAD_DIGITAL_SIGNATURE) //对方的数字签名,看看我这里有没有它的公钥,可以在请求获得它的公钥
	{
		if(msg.ID == HEAD_DIGITAL_SIGNATURE_NO)
		{	//对方还没识别我这条消息的身份
			MessageBox(
				NULL,
				"对方不是 " 
				+ pMain->GetFriendName() 
				+ " 好友或没有 " 
				+ pMain->GetUserName() 
				+ " 用户的公钥",
				"对方没有收到刚发送的消息",
				MB_ICONEXCLAMATION);
		}
	}

	else if(msg.head == HEAD_SENDFILE) //对方发来了文件及相关信息
	{
		pMain->receive_file(msg);
	}
	/******************************/

	//要求读、写、关闭通知
//	AsyncSelect(FD_READ | FD_WRITE | FD_CLOSE);
}